package com.qrxl.common.service;


import com.qrxl.enums.EnumUploadItem;

import java.io.File;

/**
 * 远程文件服务
 */
public interface IFileService {

    /**
     * 上传File文件
     *
     * @param file           文件
     * @param enumUploadItem 上传枚举
     * @return 文件相对路径，如：/oss/upload/facePicture/2019-06-27/22a67c2539bc422098019f3cf04c5ae0.jpg
     * @throws Exception
     */
    String uploadFile(EnumUploadItem enumUploadItem, File file) throws Exception;

    /**
     * 上传base64
     *
     * @param base64         文件base
     * @param enumUploadItem 上传枚举
     * @return 文件相对路径，如：/oss/upload/facePicture/2019-06-27/22a67c2539bc422098019f3cf04c5ae0.jpg
     * @throws Exception
     */
    String uploadBase64(EnumUploadItem enumUploadItem, String base64) throws Exception;

    /**
     * 上传byte[]文件
     *
     * @param bytes          字节
     * @param enumUploadItem 上传枚举
     * @return 文件相对路径，如：/oss/upload/facePicture/2019-06-27/22a67c2539bc422098019f3cf04c5ae0.jpg
     * @throws Exception
     */
    String uploadFile(EnumUploadItem enumUploadItem, byte[] bytes) throws Exception;


    /**
     * 指定文件类型上传
     *
     * @param enumUploadItem
     * @param bytes
     * @param fileType       文件类型（如：xxx.jpg、.jpg、jpg）会覆盖 enumUploadItem中的文件类型
     * @return 文件相对路径，如：/oss/upload/facePicture/2019-06-27/22a67c2539bc422098019f3cf04c5ae0.jpg
     * @throws Exception
     */
    String uploadFile(EnumUploadItem enumUploadItem, byte[] bytes, String fileType) throws Exception;


    /**
     * 指定key上传，如果对应key存在，也返回正常路径
     *
     * @param bytes 字节
     * @param key   以“/oss/upload”开头
     * @return 文件相对路径，如：/oss/upload/facePicture/2019-06-27/22a67c2539bc422098019f3cf04c5ae0.jpg
     * @throws Exception
     */
    String uploadFile(String key, byte[] bytes) throws Exception;

    /**
     * 获取MD5码
     *
     * @param path 以“/oss/upload”开头
     * @return
     */
    String getMD5String(String path);


    /**
     * 获取byte[]，文件不存在返回0字节
     *
     * @param path 以“/oss/upload”开头
     * @return
     * @throws Exception
     */
    byte[] getFileBytes(String path) throws Exception;


    /**
     * 组装固定key,
     *
     * @return
     */
    String getFileKey(EnumUploadItem enumUploadItem, String... paths);

    /**
     * 判断文件是否存在
     *
     * @param key
     * @return
     */
    boolean fileExist(String key);

    /**
     * 文件转换目录
     *
     * @param key            /oss/upload/facePicture/xxx.jpg
     * @param enumUploadItem 上传枚举
     * @return 文件相对路径，如：/oss/upload/facePicture/2019-06-27/22a67c2539bc422098019f3cf04c5ae0.jpg
     * @throws Exception
     */
    String changeDir(EnumUploadItem enumUploadItem, String key) throws Exception;
}
